home *** CD-ROM | disk | FTP | other *** search
- ;void key_pause(code,ascii,delay_1,delay_2);
- ; unsigned char code,ascii,delay_1,delay_2;
-
- EXTRN _memory_model:byte
-
- _TEXT SEGMENT BYTE PUBLIC 'CODE'
- ASSUME CS:_TEXT
- PUBLIC _key_pause
- _key_pause proc near
- sti ;enable interrupts
- push bp ;
- mov bp,sp ;set up stack frame
- push di ;
- push si ;
- cmp _memory_model,0 ;near or far?
- jle begin ;jump if near
- inc bp ;else add 2 to BP
- inc bp ;
- begin: mov bh,[bp+4] ;code to BH
- mov bl,[bp+6] ;extended code flag to BL
- sub ax,ax ;get Delay1
- mov al,[bp+8] ;
- mov si,ax ;first char delay
- L1: mov ah,0 ;function to read timer
- int 1AH ;time to CX:DX
- add dx,si ;add delay to low word
- mov di,dx ;copy to DI
- L2: int 1AH ;keep reading time...
- cmp dx,di ;delay complete?
- jne L2 ;jump if not
- mov ah,1 ;BIOS func to chk buffer
- int 16h ;check for character
- jz L5 ;quit if buffer empty
- cmp al,bl ;see if extended code
- jne L3 ;jump if not extended
- mov al,ah ;else shift code to AL
- L3: cmp al,bh ;is it the right code?
- jne L5 ;quit routine if not
- L4: mov ah,6 ;now clear buffer
- mov dl,0FFH ;DOS func to read char
- int 21h ;read char w.o. waiting
- jnz L4 ;read again if char found
- sub ax,ax ;fetch Delay2
- mov al,[bp+10] ;
- mov si,ax ;typematic delay
- jmp short L1 ;go check buffer again
- L5: pop si ;
- pop di ;
- pop bp ;
- cmp _memory_model,0 ;quit
- jle quit ;
- db 0CBh ;RET far
- quit: ret ;RET near
- _key_pause ENDP
- _TEXT ENDS
- END